public class code02 {
//    寻找旋转排序数组中的最小值
public int findMin(int[] nums) {
    // 这道题的解法和上面的 33 题有异曲同工之处
    // 无论你旋转多少次数组，最终都会将数组划分成为两部分递增的区间
    // 所以可以根据中间值和边界值对比的情况对最小值进行处理

    // 定义两个指针，分别指向数组的左右边界
    int left = 0;
    int right = nums.length - 1;

    // 定义一个最小值，用来存储最小情况
    int min = Integer.MAX_VALUE;

    // 进行二分查找
    while(left <= right) {
        // 定义一个参数确定中间值
        int mid = (left + right) / 2;

        if(nums[left] <= nums[mid]) {
            // 此时就说明从左边界到中间值，这是一个递增的范围
            // 此时就说明最左侧的值其实就是在这个范围中最小的
            min = Math.min(nums[left], min);
            // 比较之后，这里收紧左边界到 mid 处
            left = mid + 1;
        } else {
            // 右半部分有序
            // 右半部分有序，此时就说明右半部分是递增的，所以 mid 的值是最小的
            min = Math.min(nums[mid], min);
            // 比较之后，将有边界向回拉
            right = mid - 1;
        }
    }

    // 最后返回最小值即可
    return min;
}
}
